【Dragon Crashers Sample】Timeline PlayableDirector

July 10, 2022


Timelineを使用する上でPlayableDirector Componentが必須になります このComponentが何をやっているか確認します

概要

タイムラインアセットを再生、更新、停止、イベント発火を担うコンポーネント つまりタイムラインを動かすために必要なものとなります

サンプルとしてUnity公式が公開している Dragon Crashers - 2D Sample Project を見てみます

https://assetstore.unity.com/packages/essentials/tutorial-projects/dragon-crashers-2d-sample-project-190721?locale=ja-JP

Sceen_Game_Menuシーンを開いて、その中にある Timeline_FradeFromBlack を見てみます

219AC47B0AAB9F22A8F82B775B79577A

Playable Director がアタッチされています A0044E701E18A8F12B240FADE6555E48

Timline_FradeFromBlackを管理しているのが親にある Screen Fader Manager

582566EEA20020D09DB99EB802CC6F4E

CutsceneTimelineBehaviour をアタッチされていますが、中身を見ると単に PlayableDirector の Play を呼び出しています

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Events;

public class CutsceneTimelineBehaviour : MonoBehaviour
{

    [Header("Timeline")]
    public PlayableDirector cutsceneTimeline;

    [Header("Marker Events")]
    public UnityEvent cutsceneTimelineFinished;

    public void StartTimeline()
    {
        cutsceneTimeline.Play();
    }

    public void TimelineFinished()
    {
        cutsceneTimelineFinished.Invoke();
    }
}

管理者は適切なタイミングで StartTimlineを呼び出しているだけですね

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Events;

public class ScreenFaderManager : MonoBehaviour
{
    [Header("Sequences")]
    public CutsceneTimelineBehaviour fadeFromBlackTimeline;
    public CutsceneTimelineBehaviour fadeToBlackTimeline;

    [Header("Automatic Fade")]
    public bool autoStartSceneWithFadeFromBlack;

    [Header("Events")]
    public UnityEvent fadeFromBlackFinishedEvent;
    public UnityEvent fadeToBlackFinishedEvent;

    void Start()
    {
        if(autoStartSceneWithFadeFromBlack)
        {
            StartFadeFromBlack();
        }
    }

    // フェード開始
    public void StartFadeFromBlack()
    {
        fadeFromBlackTimeline.StartTimeline();
    }

    public void StartFadeToBlack()
    {
        fadeToBlackTimeline.StartTimeline();
    }

    // フェード終了
    public void FadeFromBlackFinished()
    {
        fadeFromBlackFinishedEvent.Invoke();
    }

    public void FadeToBlackFinished()
    {
        fadeToBlackFinishedEvent.Invoke();
    }

}

タイムラインアセットは

  • Activation : タイムラインが終了した時のアクティブ状態を設定
  • Fader : フェードアニメーションを行う

を持っています

8651C044FCD8EAB9EAEB16B88DE05B63

Playableはタイムラインアセットをスクリプトから再生させる機能を持つ事がわかりました

Playableが持つ各プロパティ

  • Playable 再生するタイムラインアセット
  • UpdateMethod タイムラインの更新タイミングを指定
    • DSP: digital signal processing DSPクロックと同期する。オーディオと同期する必要がある場合にこれを利用すると良いそうです
    • GameTime: ゲームクロックと同期。(つまり deltaTime)
    • Unscaled Game Time: ゲームクロックと動機だがタイムスケールの影響は受けない (つまり UnscaledDeltaTime)
    • Manual: スクリプトで手動更新する場合
  • Play on Awake
    • シーン再生時にすぐに再生させる場合にチェックを付ける
  • Wrap Mode
    • Hold: 1度だけ再生。最後のフレームで止まる
    • Loop: ループ再生
    • None: 一度だけ再生。終了後再生前にリセットされる
  • Initial TIme 開始までの時間を指定(秒) Playを呼び出してから実際にアニメーションが開始されるまでの時間を指定可能。
  • CurrentTime 現在の経過時間
  • Bindings
    • Trackにどのゲームオブジェクトを紐付けるか決定。今回ではフェード対象とアクティブ対象のGameObject指定。